const Base64 = require('js-base64').Base64
const md5 = require('js-md5')
const qs = require('qs')
const http = require('http')
const mp3FilePath = require('./const').mp3FilePath
const resUrl = require('./const').resUrl
const fs = require('fs')

// 科大讯飞语音合成
function createVoice(req, res) {
	// const text = req.query.text
	// const lang = req.query.lang
	const text = '测试科大讯飞在线语言合成api功能，比如说，我们输入一段文本，科大讯飞api会在线实时生成语音返回给客户端'
	const lang = 'cn'

	let engineType = 'intp65'
	if (lang.toLowerCase() === 'en') {
		engineType = 'intp65_en'
	}
	const speed = '30'
	const voiceParam = {
		auf: 'audio/L16;rate=16000',
		aue: 'lame',
		voice_name: 'xiaoyan',
		speed,
		volume: '50',
		pitch: '50',
		engine_Type: engineType,
		text_type: 'text'
	}

	const currentTime = Math.floor(new Date().getTime() / 1000)
	const appId = '9e00dc53'
	const apiKey = '3f71d7ec4c0a4f553c114f8ee69fd37f'
	const authorization = Base64.encode(JSON.stringify(voiceParam))
	const checkSum = md5(apiKey + currentTime + authorization)
	const headers = {}
	headers['Content-Type'] = 'application/x-www-from-urlencoded;charset=utf-8'
	headers['authorization'] = authorization
	headers['X-Appid'] = appId
	headers['X-CurTime'] = currentTime
	headers['X-CheckSum'] = checkSum
	headers['X-Real-IP'] = '127.0.0.1'
	const data = qs.stringify({
		text
	})
	// console.log(data)
	const options = {
		host: 'tts-api.xfyun.cn',
		path: 'wss://tts-api.xfyun.cn/v2/tts',
		method: 'POST',
		headers
	}
	const request = http.request(options, response => {
		let mp3 = ''
		const contentLength = response.headers['content-length']
		response.setEncoding('binary')
		// 获取语言的Buffer文件
		response.on('data', data => {
			// 将Buffer文件转换为MP3文件
			mp3 += data
			// console.log(mp3)
			const process = data.length / contentLength * 100
			const percent = parseInt(process.toFixed(2))
			// console.log(percent)
		})
		response.on('end', () => {
			const contentType = response.headers['content-type']
			if (contentType === 'text/html') {
				res.send(mp3)
			} else if ( contentType === 'text/plain') {
				res.send(mp3)
			} else {
				console.log(mp3)
				const fileName = new Date().getTime()
				// 生成mp3的文件路径
				const filePath = `${mp3FilePath}/${fileName}.mp3`
				// 定义下载链接
				const downloadUrl = `${resUrl}/mp3/${fileName}.mp3`
				// console.log(filePath, downloadUrl)
				fs.writeFile(filePath, mp3, 'binary', err => {
					if (err) {
						res.json({
							error: 1,
							msg: '下载失败！',
							errMsg: err,
						})
					} else {
						res.json({
							error: 0,
							msg: '下载成功！',
							path: downloadUrl
						})
					}
				})	
			}
		})
	})
	request.write(data)
	request.end()
}

module.exports= createVoice

// const CryptoJS = require('crypto-js')
// const WebSocket = require('ws')
// var log = require('log4node')
// var fs = require('fs')
// const mp3FilePath = require('./const').mp3FilePath
// const resUrl = require('./const').resUrl

// function createVoice(req, res) {
// 	// const text = req.query.text
// 	// const lang = req.query.lang
// 	const text = '测试科大讯飞在线语言合成api功能，比如说，我们输入一段文本，科大讯飞api会在线实时生成语音返回给客户端'
// 	const lang = 'cn'

// 	// 系统配置 
// 	const config = {
// 		// 请求地址
// 		hostUrl: "wss://tts-api.xfyun.cn/v2/tts",
// 		host: "tts-api.xfyun.cn",
// 		//在控制台-我的应用-在线语音合成（流式版）获取
// 		appid: "9e00dc53",
// 		//在控制台-我的应用-在线语音合成（流式版）获取
// 		apiSecret: "MGYxYWRmMjI1MTIzNjA4MzY1NDM3NWZm",
// 		//在控制台-我的应用-在线语音合成（流式版）获取
// 		apiKey: "3f71d7ec4c0a4f553c114f8ee69fd37f",
// 		text: "这是一个例子，请输入您要合成的文本",
// 		uri: "/v2/tts",
// 	}

// 	// 获取当前时间 RFC1123格式
// 	let date = (new Date().toUTCString())
// 	// 设置当前临时状态为初始化

// 	let wssUrl = config.hostUrl + "?authorization=" + getAuthStr(date) + "&date=" + date + "&host=" + config.host
// 	let ws = new WebSocket(wssUrl)

// 	// 连接建立完毕，读取数据进行识别
// 	ws.on('open', () => {
// 		log.info("websocket connect!")
// 		send()
// 		// 如果之前保存过音频文件，删除之
// 		if (fs.existsSync('./test.pcm')) {
// 			fs.unlink('./test.pcm', (err) => {
// 				if (err) {
// 					log.error('remove error: ' + err)   
// 				}
// 			})
// 		}
// 	})

// 	// 得到结果后进行处理，仅供参考，具体业务具体对待
// 	ws.on('message', (data, err) => {
// 		if (err) {
// 			log.error('message error: ' + err)
// 			return
// 		}

// 		let res = JSON.parse(data)

// 		if (res.code != 0) {
// 			log.error(`${res.code}: ${res.message}`)
// 			ws.close()
// 			return
// 		}

// 		let audio = res.data.audio
// 		let audioBuf = Buffer.from(audio, 'base64')

// 		save(audioBuf)

// 		if (res.code == 0 && res.data.status == 2) {
// 			ws.close()
// 		}
// 	})

// 	// 资源释放
// 	ws.on('close', () => {
// 		log.info('connect close!')
// 	})

// 	// 连接错误
// 	ws.on('error', (err) => {
// 		log.error("websocket connect err: " + err)
// 	})

// 	// 鉴权签名
// 	function getAuthStr(date) {
// 		let signatureOrigin = `host: ${config.host}\ndate: ${date}\nGET ${config.uri} HTTP/1.1`
// 		let signatureSha = CryptoJS.HmacSHA256(signatureOrigin, config.apiSecret)
// 		let signature = CryptoJS.enc.Base64.stringify(signatureSha)
// 		let authorizationOrigin = `api_key="${config.apiKey}", algorithm="hmac-sha256", headers="host date request-line", signature="${signature}"`
// 		let authStr = CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(authorizationOrigin))
// 		return authStr
// 	}

// 	// 传输数据
// 	function send() {
// 		let frame = {
// 			// 填充common
// 			"common": {
// 				"app_id": config.appid
// 			},
// 			// 填充business
// 			"business": {
// 				"aue": "raw",
// 				"auf": "audio/L16;rate=16000",
// 				"vcn": "xiaoyan",
// 				"tte": "UTF8"
// 			},
// 			// 填充data
// 			"data": {
// 				"text": Buffer.from(config.text).toString('base64'),
// 				"status": 2
// 			}
// 		}
// 		// ws.send(JSON.stringify(frame))
// 	}

// 	const fileName = new Date().getTime()
// 	// 生成mp3的文件路径
// 	const filePath = `${mp3FilePath}/${fileName}.pcm`
// 	// 定义下载链接
// 	const downloadUrl = `${resUrl}/mp3/${fileName}.mp3`
// 	// 保存文件
// 	function save(data) {
// 		fs.writeFile(filePath, data, { flag: 'a' }, (err) => {
// 			if (err) {
// 				res.json({
// 					error: 1,
// 					msg: '下载失败！',
// 					errMsg: err,
// 				})
// 			} else {
// 				res.json({
// 					error: 0,
// 					msg: '下载成功！',
// 					path: downloadUrl
// 				})
// 			}
// 		})
// 	}
// }

// module.exports = createVoice
